package icu.xuyijie.mysecondspringboot.controller;

import icu.xuyijie.mysecondspringboot.entity.User;
import icu.xuyijie.mysecondspringboot.mapper.UserMapper;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Objects;

/**
 * @author 徐一杰
 * @date 2024/10/29 15:39
 * @description 用户相关请求
 */
// url 映射
@RequestMapping("/user")
// 表明这个类是 spring boot 的一个控制器
@Controller
// 自动生成日志打印器
@Slf4j
public class UserController {
    //private final Logger log = LoggerFactory.getLogger(UserController.class)

    @Autowired
    private UserMapper userMapper;

    // RequestMapping 可以接收 GET 和 POST 请求
    //@RequestMapping("/login")
    // 只可以接收 POST 请求
    //@PostMapping("/login")
    // 只可以接收 GET 请求
    @PostMapping("/login")
    public String login1213213(String username, String password, Model model, HttpSession session) {
        List<User> userList = userMapper.findByUsernameAndPassword(username, password);

        if (userList.isEmpty()) {
            log.error("登录失败");
            model.addAttribute("loginMsg", "登录失败");
            return "index";
        }

        log.info("登录成功");

        // 在服务器里面存一份 session 登录信息
        session.setAttribute("isLogin", true);

        // 重定向到 StudentController 里的方法
        return "redirect:/student/findAll";
    }

    @PostMapping("/register")
    public String register(String username, String password, String rePassword, Model model) {
        // 判断两次输入密码是否一样
        if (!Objects.equals(password, rePassword)) {
            model.addAttribute("registerMsg", "两次输入密码不一致");
            return "index";
        }

        // 判断用户名是否已被注册：查询数据库里，是否有 username 的数据，有的话就不允许再注册了，让用户换个名字
        List<User> userList = userMapper.findByUsername(username);
        // 不为空，说明此用户名已注册
        if (!userList.isEmpty()) {
            model.addAttribute("registerMsg", "此用户名已注册，请更换用户名");
            return "index";
        }

        // 注册成功，插入数据到数据库
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        userMapper.insertUser(user);
        // 提示用户注册成功请登录
        model.addAttribute("loginMsg", "注册成功，请登录");

        return "index";
    }

}
